package com.runen.infinitemovement.service;

import android.annotation.SuppressLint;
import android.app.job.JobParameters;
import android.app.job.JobService;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.os.Build;
import android.util.Log;

import androidx.annotation.RequiresApi;

import com.runen.infinitemovement.steputil.StepService;

public class MyJobService extends JobService {

    public static String TAG = "MyJobService";
    Context mContext;

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        Log.d(TAG, "onStartCommand");
        return super.onStartCommand(intent, flags, startId);
    }

    @SuppressLint("WrongConstant")
    @RequiresApi(api = Build.VERSION_CODES.N)
    @Override
    public boolean onStartJob(final JobParameters params) {
        initStepService();

//        Intent it = new Intent();
//        it.setAction("android.intent.action.ACTION_USER_PRESENT");
//        it.setFlags(0x01000000);
//        it.setComponent(new ComponentName(getPackageName(), "com.runen.infinitemovement.steputil.StepScreenReceiver"));
//        this.sendBroadcast(it);
        new Thread(new Runnable() {     // JobService默认在主线程中执行，如果操作耗时任务，需要启用新线程执行
            @Override
            public void run() {
                // 具体业务逻辑代码
                Log.d(TAG, "onStartJob  run() ");
                try {
                    Thread.sleep(3000);
                    jobFinished(params, false);    // 如果onStartJob返回true的话需要调用此方法表示任务执行完毕
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }).start();

        return true;       // 返回false表示任务执行完毕，下一个任务即将展开，true表示任务还未执行结束，需要手动调用jobFinished;
    }

    @Override
    public boolean onStopJob(JobParameters params) {  //在onStartJob（）返回true的前提下， 取消cancel或者强制停止Job任务的时候才会调用到此方法
        Log.d(TAG, "onStopJob");
        return false;       // 任务是否应该在下次继续
    }


    /**
     * 初始化计步服务
     * 注：因初始化需要过程，正常项目中，初始化应该放在进入到主界面之前的activity中，比如闪屏页中进行初始化
     * 因此本demo在第一次安装时会提示"手机暂不支持计步功能"，杀死进程再次打开即可正常显示
     */
    @SuppressLint("WrongConstant")
    private void initStepService() {

        Intent intent = new Intent(this, StepService.class);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            startForegroundService(intent);
        } else {
            startService(intent);
        }
    }
}